#pragma once

#include <string>
#include "hidbox/types.h"

namespace hidbox {

/**
 * @brief 输出 HID 设备
 * 负责向系统发送 HID 报告（模拟 HID 设备输入）
 */
class OutputHIDDevice {
public:
    virtual ~OutputHIDDevice();

    /**
     * @brief 打开 HID 设备
     * @param hid_number HID 设备编号 (对应 /dev/hidgN)
     */
    void Open(u32 hid_number);

    /**
     * @brief 关闭 HID 设备
     */
    void Close();

    /**
     * @brief 写入数据到 HID 设备
     * @param data 数据指针
     * @param size 数据大小
     * @return 写入的字节数
     */
    ssize_t Write(const void* data, size_t size) const;

    /**
     * @brief 检查设备是否已打开
     * @return true 如果设备已打开
     */
    [[nodiscard]] bool IsOpened() const { return fd >= 0; }

private:
    s32 fd{-1};
};

}  // namespace hidbox
